package matheus.tp01cg;

import android.graphics.Canvas;
import android.view.SurfaceHolder;

/**
 * Faz atualizacao do canvas na areaDeDesenho em uma thread a parte
 * 
 */
public class CanvasThread extends Thread {
	private SurfaceHolder surfaceHolder;
	private AreaDeDesenho areaDeDesenho;
	private boolean run = false;

	public boolean isRunning() {
		return run;
	}

	public CanvasThread(SurfaceHolder surfaceHolder, AreaDeDesenho areaDeDesenho) {
		this.surfaceHolder = surfaceHolder;
		this.areaDeDesenho = areaDeDesenho;
	}

	public void setRunning(boolean run) {
		this.run = run;
	}

	@Override
	public void run() {
		Canvas c;
		while (run) {
			c = null;
			try {
				c = surfaceHolder.lockCanvas(null);
				synchronized (surfaceHolder) {
					areaDeDesenho.onDraw(c);
				}
			} finally {
				// mesmo que uma execao seja lancada acima, garante que o
				// SurfaceView nao seja deixado em um estado inconsistente
				if (c != null) {
					surfaceHolder.unlockCanvasAndPost(c);
				}
			}
		}
	}
}
